package com.person.base.service;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import com.person.base.model.BaseDept;
import com.person.base.model.BaseRole;
import com.person.base.model.BaseUser;
import com.person.commons.exception.DuplicateKeyException;
import com.person.commons.exception.InfrastructureException;
import com.person.commons.exception.WrongPwdException;
import com.person.commons.utils.FlipPageInfo;
import com.person.title.model.TitleClass;

public interface BaseUserService {
	/**
	 * 用户登陆
	 * @param user
	 */
	public char login(BaseUser user,HttpServletRequest request);
	
	/**
	 * 修改密码
	 * @param user
	 */
	public char updatePassWord(String userPwd,String userPwd1,String userPwd2,String userId,HttpServletRequest request);
	
	/**
	 * 新增用户
	 * @param user
	 * @return 成功返回'1' 失败返回'0'
	 * 判断帐号是否重复
	 */
	public char create(BaseUser user,HttpServletRequest request);
	
	/**
	 * 修改用户
	 * @param user
	 * @return 成功返回'1' 失败返回'0'
	 * 判断帐号是否重复
	 */
	public char modify(BaseUser user,HttpServletRequest request);
	
	/**
	 * 根据主键ID查找用户
	 * @param userId
	 * @return
	 */
	public BaseUser findUserById(String userId);
	
	/**
	 * 根据主键ID查找用户
	 * 带有部门名称和角色名称
	 * @param userId
	 * @return
	 */
	public BaseUser searchUserById(String userId);
	
	
	
	/**
	 * 查找部门下的有效用户
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchEffectByDept(String departId);
	
	/**
	 * 查找部门下的有效用户(需要分页)
	 * @param departId
	 * @return
	 */
	public FlipPageInfo searchEffectByDept(String departId,FlipPageInfo fpi);
	
	/**
	 * 根据条件查找有效用户(需要分页)
	 * @param departId
	 * @return
	 */
	public FlipPageInfo searchEffectByUser(BaseUser user,FlipPageInfo fpi);
	
	/**
	 * 查找部门下的无效用户
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchInEffectByDept(String departId);
	
	/**
	 * 查找所有无效用户
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchAllInEffectByDept();
	
	/**
	 * 查找所有有效用户
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchAllEffectByDept();
	
	
	/**
	 * 查找所有未审核用户
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchAllInAudit();
	
	/**
	 * 一级部门树
	 * @return
	 */
	public String userDepartTree(String departId,HttpServletRequest request);
	
	/**
	 * 带有部门和用户的组织结构树
	 * @return
	 */
	public String userInDepartTree(String departId,HttpServletRequest request);

	/**
	 * 根据身份证号码来初始化生日和性别
	 * @param userCode
	 * @return
	 */
	public BaseUser innitByCode(String userCode);
	
	/**
	 * 某个权限下的用户树形结构
	 * @param roleId
	 * @param request
	 * @return
	 */
	public String userInRoleTree(String roleId,HttpServletRequest request);
	
	/**
	 * 权限用户结构
	 * @param roleId
	 * @param request
	 * @return
	 */
	public List<BaseRole> userInRoles();
	
	/**
	 * 查找角色下的有效用户
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchEffectByRole(String roleId);
	
	/**
	 * 查找角色下的有效用户,并且不是练马师
	 * @param departId
	 * @return
	 */
	public List<BaseUser> searchEffectByRoleTrainer(String roleId);
	
	/**
	 * 根据拼音码查找用户
	 * @param spell
	 * @return
	 */
	public List<BaseUser> getAllBySpelllist(String spell);
	
	/**
	 * 查找所有无部门人员
	 * @param spell
	 * @return
	 */
	public List<BaseUser> getAllNoDept();
	
	/**
	 * 删除用户
	 * @param user
	 * @param request
	 * @return
	 */
	public char deleteUser(BaseUser user,HttpServletRequest request);
	
	/**
	 * 添加系统日志
	 * @param admin
	 * @param ip
	 * @param message
	 * @param code
	 */
	public void createLog(BaseUser admin,String ip,String message,String code);
	
	
	/**
	 * 根据菜单链接，查找跟菜单相关联的栏目树形结构
	 * @param funcstr
	 * @return
	 */
	public abstract List showFun(String funcstr);
	
	
	/**
	 * 查找所有功能大类
	 * @param
	 * @return
	 */
	public abstract List<TitleClass> searchTitle();
	
	
	public BaseDept findDeptByUserId(String UserId);
}
